/// 表示一次 BLE 广播解析后的核心数据。
class BleBeacon {
  const BleBeacon({
    required this.major,
    required this.minor,
    required this.rssi,
    required this.timestamp,
  });

  /// iBeacon Major，对应 MQTT lb 数组中的 `ma`。
  final int major;

  /// iBeacon Minor，对应 MQTT lb 数组中的 `mi`。
  final int minor;

  /// 信号强度，使用 RSSI 的绝对值，对应 MQTT lb 数组中的 `rs`。
  final int rssi;

  /// 记录解析时间，便于列表展示和去重。
  final DateTime timestamp;

  /// 生成唯一键，便于控制器做去重合并。
  String get key => '$major-$minor';

  Map<String, dynamic> toJson() => {
        'ma': major,
        'mi': minor,
        'rs': rssi,
      };

  @override
  bool operator ==(Object other) {
    if (identical(this, other)) return true;
    return other is BleBeacon &&
        other.major == major &&
        other.minor == minor &&
        other.rssi == rssi &&
        other.timestamp == timestamp;
  }

  @override
  int get hashCode => Object.hash(major, minor, rssi, timestamp);
}
